package com.software.task.controller;

import com.software.task.pojo.Category;
import com.software.task.pojo.Result;
import com.software.task.service.CategoryService;
import jakarta.annotation.Resource;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
/**
 * @author 浦慧慧
 * @since 2024/12/15 11.34
 * @version 1.0
 */
@RestController
@RequestMapping("/categories")
public class CategoryController {
    @Resource
    private CategoryService categoryService;
    /**
     * 选课接口
     *
     * @param category 课程信息
     * @return Result    成功或失败
     */

    @PostMapping
    public Result<?> add(@RequestBody @Validated(Category.Add.class) Category category) {
// 检查是否已经选择了该课程
        if (categoryService.existsByCreateUserAndTaskId(category.getCreateUser(), category.getTaskId())) {
            return Result.error("您已经选择了该课程了");
        }
        // 检查用户角色是否为学生（role_id = 3）
        if (!categoryService.isStudent(category.getCreateUser())) {
            return Result.error("您不是学生，无法选课");
        }
        // 进行选课操作
        categoryService.add(category);
        return Result.success();
    }

    @GetMapping
    public Result<List<Category> > list() {
        List<Category> categories = categoryService.list();
        return Result.success(categories);
    }

    /**
     * 选课接口
     *
     * @param category 课程信息
     * @return Result    成功或失败
     */
    @PutMapping
    public Result<?> update(@RequestBody @Validated(Category.Update.class) Category category) {
        categoryService.update(category);
        return Result.success();
    }

    /**
     * 选课接口
     *
     * @param id 课程id
     * @return Result    成功或失败
     */

    @DeleteMapping("/{id}")
    public Result<?> delete(@PathVariable Integer id) {
        categoryService.delete(id);
        return Result.success();
    }
}
